var reorganizeString = function (S) {
    const hash = {}
    for (let s of S) {
        hash[s] = (hash[s]||0)+1;
    }

    // 找出字母最多的那个
    let maxNum = 0
    let maxKey = null
    for (let key in hash) {
        if (hash[key] > maxNum) {
            maxNum = hash[key]
            maxKey = key
        }
    }

    // 填充maxNum个maxKey ==> [a,a,a]
    let num = new Array(maxNum).fill(maxKey)

    // 遍历 num 
    // 要求实现的效果是 当遍历到终点之后，从头开始继续遍历
    delete hash[maxKey] // 删除出现最多的元素

    // 将非最多元素置于temp中
    let keyArr = Object.keys(hash);
    let temp = [];
    for(let i = 0;i<keyArr.length;i++){
        while(hash[keyArr[i]]--){
            temp.push(keyArr[i])
        }
    }

    if(maxNum-1>temp.length){
        return "";
    }

    // 重头开始遍历的情况：aaaa轮完了并且temp还未结束
    let p=0;
    while(p<temp.length){          
        for(let j=0;j<num.length&&p<temp.length;j++){
            let insertItem = temp[p++];
            num[j] += insertItem;
        }
    }
    return num.join('')
}
